<?php

include_once 'CtlGeneral.php';

include_once '../entities/CursoTaller.php';
include_once '../entities/Modulo.php';
include_once '../boundaries/gestionarCursoTaller/BoundFormularioCursoTaller.php';

class CtlGestionCursosTalleres extends CtlGeneral {
   
    public function __construct($param, $file) {
        
        switch ($param['opc']) {
            
            case 'frmRegisCursoTaller': $this->mostrarBoundFormulario('R', null);
                break;

            case 'menuPrinc': echo $this->insertarTitulo("Gestionar Cursos/Talleres");
                
                    echo "<br><input type=\"button\" id=\"regis\" name=\"regis\" value=\"Registrar\" 
                                onclick=\"ajax('controllers/CtlGestionCursosTalleres.php', 'frmRegisCursoTaller', 'vacio', 'contenido')\">";
                
                        echo $this->listarCursoTaller('P');  
                break;
            
            case 'regisCursoTaller': $cursoTaller = $this->regisCursoTaller($param);
                                    if ($cursoTaller != false) {
                                        echo $this->insertarTitulo("El curso/taller ha sido registrado");
                                        
                                        $this->mostrarBoundFormulario("M", $cursoTaller['cutaidcursotaller']);
                                    } else {
                                        
                                        echo $this->insertarTitulo("Ocurrio un error al registrar el curso/taller");
                                        
                                        echo $this->insertarTitulo("Gestionar Cursos/Talleres");
                
                                        echo "<br><input type=\"button\" id=\"regis\" name=\"regis\" value=\"Registrar\" 
                                                    onclick=\"ajax('controllers/CtlGestionCursosTalleres.php', 'frmRegisCursoTaller', 'vacio', 'contenido')\">";

                                        echo $this->listarCursoTaller();
                                    }
                break;
                
            case 'frmDetallCursoTaller': $this->mostrarBoundFormulario("D", $param['id']);
                break;
            
            case 'frmModifCursoTaller': $this->mostrarBoundFormulario("M", $param['id']);
                break;
            
            case 'modifCursoTaller': $cursoTaller = $this->modifCursoTaller($param ['id'], $param);
                                    if ($cursoTaller != false) {
                                        echo $this->insertarTitulo("El curso/taller ha sido modificado");
                                        
                                        $this->mostrarBoundFormulario("M", $cursoTaller['cutaidcursotaller']);
                                    } else {
                                        
                                        echo $this->insertarTitulo("Ocurrio un error al modificar el curso/taller");
                                        
                                        echo $this->insertarTitulo("Gestionar Cursos/Talleres");
                
                                        echo "<br><br><br><input type=\"button\" id=\"regis\" name=\"regis\" value=\"Registrar\" 
                                                    onclick=\"ajax('controllers/CtlGestionCursosTalleres.php', 'frmRegisCursoTaller', 'vacio', 'contenido')\">";

                                        echo $this->listarCursoTaller();
                                    }
                break;
                
                case 'menuSubirTemario': echo $this->insertarTitulo("Subir Temario");
                                echo "<br><input type=\"button\" value=\"Regresar\" 
                                   onclick=\"ajax('controllers/CtlGestionCursosTalleres.php', 'menuPrinc', 'vacio', 'contenido')\"/><table><tr><td>
                                            <iframe scrolling=\"no\" height=\"45\" 
                                            src=\"controllers/CtlGestionCursosTalleres.php?opc=menuCargarArchivo&idCursoTaller=$param[id]&tipo=M&claseArchivo=T\" >";
                                echo "</iframe></td></tr></table>";
                    break;
                
                case 'menuCargarArchivo': $this->menuCargaArchivo("M", $param['idCursoTaller'], null, $param['claseArchivo']);
                    break;

                case 'cargarArchivo': $this->cargarArchivo($param['id'], $param['claseArchivo'], $file);
                    break;
                
                case 'listMateriales': echo $this->listarMateriales($param['id']);
                    break;
                
                case 'menuSubirMaterial': echo $this->insertarTitulo("Subir material del curso/taller");
                                            echo "<br><input type=\"button\" value=\"Regresar\" 
                                                        onclick=\"ajaxConId('controllers/CtlGestionCursosTalleres.php', 'listMateriales', 'vacio', 'contenido', $param[id])\"/><table><tr><td>
                                                    <iframe scrolling=\"no\" height=\"45\" 
                                                        src=\"controllers/CtlGestionCursosTalleres.php?opc=menuCargarArchivo&idCursoTaller=$param[id]&tipo=M&claseArchivo=M\" >
                                                    </iframe></td></tr></table>";
                    break;
                
                case 'menuCargarMaterial':
                    break;
                
                case 'borrarMaterial': $this->borrarMaterial($param['id']);
                    break;
           
            default: echo "No ha seleccionado una opción valida";
        }
    }
    
    private function borrarMaterial ($idMaterial) {
        
        $cursoTaller = new CursoTaller();
        
        $idCursoTaller = $cursoTaller->borrarMaterial($idMaterial);
        
        echo $this->insertarTitulo( ($idCursoTaller != false ? "El material ha sido eliminado" : "Ha ocurrido un error") );
        
        echo $this->listarMateriales($idCursoTaller);
    }


    private function listarMateriales ($idCursoTaller) {
        //Creamos el objeto de tipo CursoTaller
        $cursoTaller = new CursoTaller();
        //Obtenemos de la BD la lista de Materiales
        $listaMateriales = $cursoTaller->listarMateriales($idCursoTaller);
        
        $tablaEnHTML = $this->insertarTitulo("Materiales del curso/taller");
        
        $tablaEnHTML .= "<br><input type=\"button\" id=\"regis\" name=\"regis\" value=\"Subir Nuevo Material\" 
                                onclick=\"ajaxConId('controllers/CtlGestionCursosTalleres.php', 'menuSubirMaterial', 'vacio', 'contenido', $idCursoTaller)\">
                                <input type=\"button\" value=\"Regresar\" onclick=\"ajax('controllers/CtlGestionCursosTalleres.php', 'menuPrinc', 'vacio', 'contenido')\">";
        
        //Cabecera de la tabla
        $tablaEnHTML .= "<script type='text/javascript'>
                        ajax('controllers/gestionarCurriculum/CtlCurriculum.php', 'certi_listar', 'vacio', 'contenido');
                </script>
            <table class='tablas_sort'><thead>
                        <tr>
                            <th>Nombre del material</th>
                            <th>Opciones</th>
                        </tr></thead><tbody>";
        
        if ($listaMateriales != false) {
        
            //Recorremos los valores de la tabla
            foreach ($listaMateriales as $tempMaterial) {

                //Mostramos cada renglón de la tabla
                $tablaEnHTML .=    
                    "<tr>
                        <td>$tempMaterial[madirmaterial]</td>
                        <td>
                            <a href='docs/materiales/$tempMaterial[madirmaterial]' target='_blank'><input type='button' value='Descargar'/></a>

                            <input type='button' value='Eliminar'
                                    onclick=\"realizarAccionDeCursoTaller('$tempMaterial[maidmaterial]', 'borrarMaterial')\" >
                        </td>
                    </tr>";
            }
        }
        
        //Cerramos la tabla
        $tablaEnHTML .= "</tbody></table><div id='verCursoTaller'></div>";
        
        return $tablaEnHTML;
    }

        //Función para mostrar el menu para subir el temario y los materiales del curso taller
    private function menuCargaArchivo ($tipo, $idCursoTaller, $nomArchivo, $claseArchivo) {
        if ($tipo == 'M' && $nomArchivo == "") {
            echo "<body style='margin-top: 0px; margin-bottom: 0px;'>
                    <form action='CtlGestionCursosTalleres.php' method='post' enctype='multipart/form-data' name='file' id='file' target='_self'>
                        <input type='hidden' name='opc' value='cargarArchivo' />
                        <input type='hidden' name='id' value='$idCursoTaller' />
                        <input type='hidden' name='claseArchivo' value='$claseArchivo' />
                        <input type='file' name='file' /><input type='submit' value='Subir ". ($claseArchivo == "T" ? "temario" : "material") ."'>
                    </form>
                </body>";
        } else  { 
           echo "<body style='margin-top: 0px; margin-bottom: 0px;'>
                    ". ( ($nomArchivo != "") ? 
                        "<a href='../docs/". ($claseArchivo == "T" ? "temarios" : "materiales") ."/$nomArchivo' target='_blank' >Descargar archivo</a>" 
                        : "Aun no se ha subido temario" ) 
                ."<br></body>";
        }
    }

    //Función para cargar el temario y los materiales del curso taller
    private function cargarArchivo($id, $claseArchivo, $file) {
        
        //Definimos el tipo de archivo permitido
        $extenPermi = array("pdf", "jpeg", "jpg", "png");
        $temp = explode(".", $file["file"]["name"]);
        $exten = end($temp);

        $nomArch = $file['file']['name'];

        if ($nomArch == "") {
            print "Debes seleccionar un archivo<br><a href='CtlGestionCursosTalleres.php?opc=menuCargarArchivo&idCursoTaller=$id&tipo=M&claseArchivo=". ($claseArchivo == "T" ? "T" : "M") ."'>Volver a intentar</a>";
            
        //Si el archivo es de un formato no permitido
        } else if (!in_array($exten, $extenPermi)) { 
            
            echo "Archivo no permitido<br><a href='CtlGestionCursosTalleres.php?opc=menuCargarArchivo&idCursoTaller=$id&tipo=M&claseArchivo=". ($claseArchivo == "T" ? "T" : "M") ."'>Volver a intentar</a>";
        } else {
            
            //Creamos el objeto de tipo cursoTaller y obtenemos sus datos
            $cursoTaller = new CursoTaller();
            //Iniciamos la transacción
            $cursoTaller->iniTransaccion();
            
            $idMaterial = $cursoTaller->añadirMaterial($id, $nomArch, $claseArchivo);

            //Verificamos que se registre el nuevo material
            if ($idMaterial != false && $idMaterial != 0) {
                
                //Nombramos el archivo, si es Material es IdCursoTaller-IdMaterial<nombre>
                    //Si es temario es IdCursoTaller-<nombre>
                $nomArch = $claseArchivo != "T" ? 
                    $id . "-" . $idMaterial . $file['file']['name'] 
                    : 
                    $id . "-" . $file['file']['name'];

                $destino = "../docs/". ($claseArchivo == "T" ? "temarios" : "materiales") ."/$nomArch";

                if (move_uploaded_file($file['file']['tmp_name'], $destino)) {

                    $grupo = new Grupo(); $grupo->registrarContratoProfesorModulo($id, $nomArch);

                    $cursoTaller->finTransaccion();

                    $this->menuCargaArchivo('D', $id, $nomArch, $claseArchivo);
                } else {

                    $cursoTaller->rollback();

                    print "El archivo no pudo ser guardado<br><a href='CtlGestionGrupos.php?opc=mostrarContrato&dir=&id=$id&tipo=M'>Volver a intentar</a>";
                }            
            } else {
                $cursoTaller->rollback();
                
                $this->insertarTitulo("Ocurrio al registrar el archivo");
                
                $this->listarCursoTaller();
            }
        }
    }
    
    private function modifCursoTaller ($idCursoTaller, $param) {
        $cursoTaller = new CursoTaller();
        
        //Inializamos la transacción
        $cursoTaller->iniTransaccion();
        
        //Modificamos el cursoTaller
        $cursoTallerTemp = $cursoTaller->modificar($idCursoTaller, $param['nombre'], $param['desc']);
        
        //Verificamos que todas las transacciones hayan sido exitosas
        if ($cursoTallerTemp != false) {
                
                //Finalizamos la transacción
                $cursoTaller->finTransaccion();
                
                return $cursoTallerTemp;
        } else {
            $cursoTaller->rollback();
            return false;
        }
    }

    private function regisCursoTaller ($param) {
        
        $cursoTaller = new CursoTaller();
        
        $cursoTaller->iniTransaccion();
        
        //Registramos el cursoTaller
        $cursoTallerNuevo = $cursoTaller->registrar($param['nombre'], $param['desc'], '0');
        
        //EXTRAEMOS DATOS DE LOS MODULOS Y LOS REGISTRAMOS
        $totalHoras = 0;
        $modulo = new Modulo();
        //Ciclo para obtener los datos de lo módulos, el número de módulos lo define la variable $param[totalModulos]
        //También se obtiene el total de horas
        for ($eCont = 1; $eCont <= $param['totalModulos']; $eCont++) {
            
            $nomModulo = $param['nomMod' . $eCont];
            $horaModulo = $param['horaMod' . $eCont];
            
            $totalHoras += $horaModulo;
            
            $esCorrecto = $modulo->registrar($cursoTallerNuevo['cutaidcursotaller'], $nomModulo, $horaModulo);
        }
        
        //Verificamos que todas las transacciones hayan sido exitosas
        if ($esCorrecto) {
            
            if ($cursoTaller->modificarTotalHoras($cursoTallerNuevo['cutaidcursotaller'], $totalHoras)) {
                
                $cursoTallerNuevo['cutahorastotales'] = $totalHoras;
                
                $cursoTaller->finTransaccion();
                
                return $cursoTallerNuevo;
            } else {
                $cursoTaller->rollback();
                
                return false;
            }
        } else {
            $cursoTaller->rollback();
            return false;
        }
    }

    private function listarCursoTaller () {
        
        //Creamos el objeto de tipo CursoTaller
        $cursoTaller = new CursoTaller();
        //Obtenemos de la BD la lista de Cursos y Talleres
        $listaCursoTaller = $cursoTaller->listarCursoTaller();
        
        //Cabecera de la tabla
        $tablaEnHTML = "<script type='text/javascript'>
                        ajax('controllers/gestionarCurriculum/CtlCurriculum.php', 'certi_listar', 'vacio', 'contenido');
                </script>
            <table class='tablas_sort'><thead>
                        <tr>
                            <th>Nombre Curso/Taller</th>
                            <th>Descripcion</th>
                            <th>Número de módulos</th>
                            <th>Horas Totales</th>
                            <th>Fecha de creación</th>
                            <th width='500'>Opciones</th>
                        </tr></thead><tbody>";
        
        if ($listaCursoTaller != false) {
        
            //Recorremos los valores de la tabla
            foreach ($listaCursoTaller as $tempCursoTaller) {

                //Mostramos cada renglón de la tabla
                $tablaEnHTML .=    
                    "<tr>
                        <td>$tempCursoTaller[cutanombre]</td>
                        <td>$tempCursoTaller[cutadescrip]</td>
                        <td>". ($cursoTaller->obtenerNumeroModulos($tempCursoTaller['cutaidcursotaller'])) ."</td>
                        <td>$tempCursoTaller[cutahorastotales]</td>
                        <td>". date_format(date_create($tempCursoTaller['cutafeccrea']), 'd-m-Y') ."</td>
                        <td>
                            <input type='button' value='Ver Detalles'
                                onclick=\"ajaxConId('controllers/CtlGestionCursosTalleres.php', 'frmDetallCursoTaller', 'vacio', 'contenido', '$tempCursoTaller[cutaidcursotaller]')\" >

                        <input type='button' value='Modificar'
                                onclick=\"ajaxConId('controllers/CtlGestionCursosTalleres.php', 'frmModifCursoTaller', 'vacio', 'contenido', '$tempCursoTaller[cutaidcursotaller]')\" >

                        <input type='button' value='Materiales del curso/taller'
                                onclick=\"ajaxConId('controllers/CtlGestionCursosTalleres.php', 'listMateriales', 'vacio', 'contenido', '$tempCursoTaller[cutaidcursotaller]')\" >".

                                        ($tempCursoTaller['cutadirtemario'] != '' ? '' : "<input type='button' value='Subir Temario'
                                onclick=\"ajaxConId('controllers/CtlGestionCursosTalleres.php', 'menuSubirTemario', 'vacio', 'contenido', '$tempCursoTaller[cutaidcursotaller]')\" >")
                        ."</td>
                    </tr>";
            }
        }
        
        //Cerramos la tabla
        $tablaEnHTML .= "</tbody></table><div id='verCursoTaller'></div>";
        
        return $tablaEnHTML;
    }
    
    public function mostrarBoundFormulario ($tipo, $idCursoTaller) {
        
        if ($tipo == 'R') {
            
            new BoundFormularioCursoTaller('R', null, null);
        } else {
            
            //Obtenemos el curso/taller 
            $cursoTaller = new CursoTaller(); $cursoTaller = $cursoTaller->obtenerPorId($idCursoTaller);
            
            //Obtenemos el modulo
            $modulos = new Modulo();
            $modulos = $modulos->listarModulosPorIdCursoTaller($idCursoTaller);
            
            new BoundFormularioCursoTaller($tipo, $cursoTaller, $modulos);
        }
    }
}
new CtlGestionCursosTalleres(( isset($_POST['opc']) ? $_POST : $_GET ), $_FILES);
?>